package Thread_.homework;

import java.util.PriorityQueue;
import java.util.concurrent.*;


class MyThreadPool{
    PriorityQueue<Runnable> queue= new PriorityQueue<>(100);
    public MyThreadPool(int n){
        for(int i=0;i<n;i++){
           new Thread(()->{
               if(!queue.isEmpty()){
                   queue.poll().run();
               }
           }).start();
        }
    }
    public void submit(Runnable runnable){
        queue.offer(runnable);
    }
}
public class test23 {
    /**
     * 使用ThreadPoolExecutor创建一个忽略最新任务的线程池，创建规则：
     * 1.核心线程数为5
     * 2.最大线程数为10
     * 3.任务队列为100
     * 4.拒绝策略为忽略最新任务
     */
//    public static void main(String[] args) {
//    ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100);

//        ThreadPoolExecutor.DiscardPolicy handler = new ThreadPoolExecutor.DiscardPolicy();
//                                    //核心线程数 最大线程数
//                                    //存活时间 时间单位
//                                    //
//        ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 10,
//                60L, TimeUnit.SECONDS,
//                queue, handler);
//        for(int i=0;i<10;i++){
//            int n=i;
//           poolExecutor.execute(()->{
//               System.out.println("线程: "+n);
//           });
//        }
//
//    }
    /**
     * 使用ThreadPoolExecutor创建一个忽略最新任务的线程池，创建规则：
     * 1.核心线程数为5
     * 2.最大线程数为10
     * 3.任务队列为100
     * 4.拒绝策略为忽略最新任务
     */
    public static void main(String[] args) {
        ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100);
        ThreadPoolExecutor.DiscardPolicy handler = new ThreadPoolExecutor.DiscardPolicy();
        //核心线程数 最大线程数
        //存活时间 时间单位
        //
        ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 10,
                60L, TimeUnit.SECONDS,
                queue, handler);
        for(int i=0;i<10;i++){
            int n=i;
            poolExecutor.execute(()->{
                System.out.println("线程: "+n);
            });
        }

    }
}
